package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.property.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      对云对讲设备服务持久层
 * </desc>
 *
 * @createDate 2017-11-17.
 */
@Mapper
@Repository
public interface ICloudIntercomDeviceServiceDao {
    /**
     * <desc>
     *      判断sn是否存在
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2018-01-02
     */
    Integer checkSnExist(@Param("sn") String sn);

    /**
     * <desc>
     *      获取云对讲设备业务服务器地址
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2018-01-02
     */
    CloudIntercomDeviceVO getBuisinessServer(@Param("sn") String sn);

    /**
     * <desc>
     *      根据sn获取云对讲业务服务器相关信息
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-15
     */
    CloudIntercomDeviceVO getCloudIntercomServer(@Param("sn") String sn);

    /**
     * <desc>
     *      更新云对讲设备token
     * <desc/>
     *
     * @param sn
     * @param token
     * @return
     * @author Chunjian.G
     * @createDate 2018-01-23
     */
    Integer updateCoudIntercomToken(@Param("sn") String sn, @Param("token") String token);

    /**
     * <desc>
     *      从数据库中取出token
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2018-01-23
     */
    String getCloudIntercomToken(@Param("sn") String sn);

    /**
     * <desc>
     *      分页查询某个云对讲设备服务的房间信息
     * <desc/>
     *
     * @param deviceUnique 设备唯一码
     * @param projectId
     * @param smartType
     * @param offset limit分页偏移量
     * @param pageSize limit分页大小
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-17
     */
    List<CloudIntercomDeviceAuthVO.Room> getServeRoomsPage(@Param("deviceUnique") String deviceUnique,
                                                           @Param("projectId") String projectId,
                                                           @Param("smartType") Integer smartType,
                                                           @Param("offset") Integer offset,
                                                           @Param("pageSize") Integer pageSize);
    /**
     * <desc>
     *      获取某个云对讲设备服务的房间总数
     * <desc/>
     *
     * @param deviceUnique 设备唯一码
     * @param projectId
     * @param smartType
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-17
     */
    Integer getServeRoomsCount(@Param("deviceUnique") String deviceUnique,
                               @Param("projectId") String projectId,
                               @Param("smartType") Integer smartType);

    /**
     * <desc>
     *      获取一组房间信息列表
     * <desc/>
     *
     * @param roomIds 房间id列表
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-17
     */
    List<CloudIntercomDeviceAuthVO.Room> getServeRoomsByIds(@Param("roomIds") String[] roomIds);



    /**
     * <desc>
     *      根据房间id查询住户列表
     * <desc/>
     *
     * @param roomIds 房间id列表
     * @return Key值(userId,userName,qqNum,sipAccount,isAllowApp,isOnline,projectId)
     * @author Chunjian.G
     * @createDate 2017-11-16
     */
    List<CloudIntercomDeviceAuthVO.RoomUser> getUsersByRoomIds(@Param("roomIds") String[] roomIds);


    /**
     * <desc>
     *      通过sn获取云对讲设备信息
     * </desc>
     *
     * @param sn
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/20
     */
    DeviceCloudIntercomInfoPO getCloudIntercomBySn(@Param("sn")String sn);

    /**
     * <desc>
     *      根据sn更新云对讲din
     * </desc>
     *
     * @param sn
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/20
     */
    Integer updateDinBySn(@Param("sn") String sn,@Param("din") String din);

    /**
     * <desc>
     *      更新用户与项目QQ号及TinyId
     * </desc>
     *
     * @param qq qq号码
     * @param tinyId qq物联身份id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/20
     */
    Integer updateUserProjectQqAndTinyId(@Param("qq") String qq,@Param("tinyId") String tinyId);


    /**
     * <desc>
     *       更新用户与房间QQ号及tinyId
     * </desc>
     *
     * @param qq qq号
     * @param tinyId qq物联身份id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/20
     */
    Integer updateUserRoomQqAndTinyId(@Param("qq") String qq,@Param("tinyId") String tinyId);



    /**
     * <desc>
     *      通过房间号查询项目id
     * </desc>
     *
     * @param roomNum 房间号
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/21
     */
    String getProjectIdByRoomNum(@Param("roomNum") String roomNum);

    /**
     * <desc>
     *      通过sn查询云对讲设备名称
     * </desc>
     *
     * @param sn
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/21
     */
    String getDeviceCloudNameBySn(@Param("sn") String sn);

    /**
     * <desc>
     *      获取设备附加信息
     * <desc/>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-20
     */
    CloudIntercomOtherInfoVO getDeviceOtherInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      通过QQ物联信息和项目id查询业主QQ号
     * </desc>
     *
     * @param tinyId QQ物联信息
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     *
     */
    String getQqNumByTinyIdAndProjectId(@Param("tinyId") String tinyId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      通过QQ物联身份id、项目id、楼号、栋号获取房间号
     * </desc>
     *
     * @param tinyId QQ物联身份id
     * @param projectId 项目id
     * @param buildNum 楼号
     * @param unitNum 栋号
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/22
     */
    String getRoomNumBySn(@Param("tinyId") String tinyId,
                          @Param("projectId") String projectId,
                          @Param("buildNum") String buildNum,
                          @Param("unitNum") String unitNum);


    /**
     * <desc>
     *      获取云对讲设备需要展示的多媒体信息
     * <desc/>
     *
     * @param deviceUnique 设备唯一码
     * @param projectId 设备所属项目编号
     * @param smartType 对应设备的云对讲类型：31-门口机，32-围墙机
     * @param mediaType 多媒体信息类别(1-文字 2-图片 3-视频)
     * @param pageSize 获取最新条数
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-22
     */
    List<CloudIntercomMediaVO> getDeviceMedias(@Param("deviceUnique") String deviceUnique,
                                               @Param("projectId") String projectId,
                                               @Param("smartType") Integer smartType,
                                               @Param("type") String mediaType,
                                               @Param("pageSize") Integer pageSize);


    /**
     * <desc>
     *      获取云对讲设备状态（1:可用  2:禁用）
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-23
     */
    Integer getDeviceState(@Param("sn") String sn);

    /**
     * <desc>
     *      获取云对讲设备二维码
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-23
     */
    String getDeviceQrcodeUrl(@Param("sn") String sn);

    /**
     * <desc>
     *      根据同一项目用户sip账号获取手机号码
     * <desc/>
     *
     * @param projectId 项目编号
     * @param userSips 用户sip账号列表
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-25
     */
    List<String> getPhoneNoByUserSips(@Param("projectId") String projectId,
                                      @Param("userSips") String[] userSips);

    /**
     * <desc>
     *      查询访客通行密码
     * <desc/>
     *
     * @param projectId 项目编号
     * @param password 动态密码
     * @param deviceId 设备4位id
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-27
     */
    AppVisitorPassCodeRecordPO getAppVisitorPassCode(@Param("projectId") String projectId,
                                                     @Param("password") String password,
                                                     @Param("deviceId")String deviceId);
    /**
     * <desc>
     *      查询访客通行密码，指定房间id
     * <desc/>
     *
     * @param projectId
     * @param password
     * @param deviceId
     * @param roomId
     * @return
     * @author Chunjian.G
     * @createDate 2018-01-31
     */
    AppVisitorPassCodeRecordPO getAppVisitorPassCodeByRoomId(@Param("projectId") String projectId,
                                                             @Param("password") String password,
                                                             @Param("deviceId")String deviceId,
                                                             @Param("roomId") String roomId);

    /**
     * <desc>
     *      动态密码校验成功后，增加动态密码已使用次数
     * <desc/>
     *
     * @param passId
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-27
     */
    Integer increaseAppVisitorPassCodeUsedNum(@Param("passId") String passId);

    /**
     * <desc>
     *      获取动态密码通行的房屋
     * <desc/>
     *
     * @param projectId 项目id
     * @param userId 用户id
     * @param deviceUnique 云对讲设备唯一码
     * @param smartType 对应设备的云对讲类型：31-门口机，32-围墙机
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-27
     */
    AppUserRoomPO getAppUserRoomByUserId(@Param("projectId") String projectId,
                                         @Param("userId") String userId,
                                         @Param("deviceUnique") String deviceUnique,
                                         @Param("smartType") Integer smartType);


    /**
     * <desc>
     *      获取tinyId对应用户房屋
     * <desc/>
     *
     * @param projectId 项目id
     * @param tinyId qq物联id
     * @param deviceUnique 云对讲设备唯一码
     * @param smartType 对应设备的云对讲类型：31-门口机，32-围墙机
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-27
     */
    AppUserRoomPO getAppUserRoomByTinyId(@Param("projectId")String projectId,
                                         @Param("tinyId")String tinyId,
                                         @Param("deviceUnique")String deviceUnique,
                                         @Param("smartType")Integer smartType);


    /**
     * <desc>
     *      获取云对讲设备的待轮询命令
     * <desc/>
     *
     * @param params
     * @param
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-25
     */
    List<CloudIntercomChangeLogOrderVO> getDeviceChangeLogOrders(Map<String,Object> params);

    /**
     * <desc>
     *      获取云对讲待轮询命令总数
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-30
     */
    Integer getDeviceChangeLogOrdersCount(@Param("sn") String sn);

    /**
     * <desc>
     *      批量完成轮询命令
     * <desc/>
     *
     * @param sn
     * @param ids 轮询命令id列表
     * @param status 状态，0-待处理，1-处理中，2-处理完
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-25
     */
    Integer changeChangeLogOrdersStatus(@Param("sn") String sn,
                                        @Param("ids") String[] ids,
                                        @Param("status") Integer status);

    /**
     * <desc>
     *      批量完成轮询命令
     * <desc/>
     *
     * @param ids 轮询命令id列表
     * @param status 状态，0-待处理，1-处理中，2-处理完
     * @return
     * @author Qiang.S
     * @createDate 2019-07-05
     */
    Integer changeAllLogOrdersStatus(@Param("ids") List<PushCloudIntercomChangeLogPO> ids,
                                     @Param("status") Integer status);

    /**
     * <desc>
     *      清除过期命令（仅修改状态）
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2017-12-18
     */
    Integer clearExpiredChangeLogOrder(@Param("sn") String sn);

    /**
     * <desc>
     *      获取云对讲类型：31-门口机，32-围墙机
     * <desc/>
     *
     * @param sn
     * @return
     * @author Chunjian.G
     * @createDate 2017-11-30
     */
    Integer getSmartTypeBySn(@Param("sn") String sn);

    /**
     * <desc>
     *      获取云对讲人脸识别配置信息
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2018/05/21
     */
    CloudTalkFaceApplyInfoVO pullDeviceInfo(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取云对讲iot信息
     * </desc>
     *
     * @param sn
     * @return
     * @author Qiang.S
     * @createDate 2019/07/16
     */
    CloudTalkIotInfoVO getCloudTalkIotInfo(@Param("sn") String sn);

    /**
     * <desc>
     *      获取项目人脸识别状态
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2018/05/30
     */
    String getFaceStatus(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取设备的人脸识别状态
     * </desc>
     *
     * @param sn
     * @return
     * @author Juguang.S
     * @createDate 2018/07/30
     */
    String getDeviceFaceStatus(@Param("sn") String sn);

    /**
     * <desc>
     *      根据SN号获取设备待机界面图片
     * <desc/>
     *
     * @param sn
     * @return
     * @author Juguang.S
     * @createDate 2018-08-09
     */
    String getStandbyInterfacePicture(@Param("sn") String sn);

    /**
     * <desc>
     *      根据SN更新设备信息
     * <desc/>
     *
     * @param sn
     * @return
     * @author Juguang.S
     * @createDate 2018-08-09
     */
    void updateDeviceInfo(Map<String,Object>  paramMap);

    /**
     * <desc>
     *      根据SN号云对讲设备更新相关指令
     * <desc/>
     *
     * @param sn
     * @return
     * @author Qiang.S
     * @createDate 2018-08-30
     */
    List<CloudIntercomChangeLogOrderVO> getUpdateDeviceInfo(@Param("sn") String sn);
    /**
     * <desc>
     *      获取未被绑定的云对讲第三方通讯账号
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2018/08/24
     */
    Map<String,Object> getCloudAccountNotBinding();

    /**
     * <desc>
     *      更新设备的第三方token信息
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2018/08/24
     */
    Integer updateDeviceAccountToken(@Param("sn") String sn,@Param("accountId") String accountId,@Param("token") String token);

    /**
     * <desc>
     *      更新第三方通信账号绑定状态
     * </desc>
     *
     * @param cloudIntercomAccountId
     * @return
     * @author Jiaqi.X
     * @createDate 2018/08/24
     */
    Integer updateCloudAccountBindingStatus(@Param("cloudIntercomAccountId") String cloudIntercomAccountId);

    /**
     * <desc>
     *      更新云对讲的系统类型
     * </desc>
     *
     * @param sn
     * @param systemType
     * @return
     * @author jiaqi.X
     * @creaetDate 2018/11/21
     */
    Integer updateSystemType(@Param("sn") String sn,@Param("systemType") Integer systemType);

    /**
     * <desc>
     *      根据roomId projectId判定该房间下的业主是否被冻结
     * </desc>
     *
     * @param roomId 房间ID
     * @param projectId 项目ID
     * @return
     * @author Juguang.S
     * @createDate 2018/11/22
     */
    Integer getUserStatusProject(@Param("roomId") String roomId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取单元代号
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.x
     * @createDate 2018/11/27
     */
    List<Map<String,Object>> getUnitAlias(@Param("projectId") String projectId,@Param("sn") String sn);

    /**
     * <desc>
     *      根据sn查询该设备是Linux还是Andriod设备
     * </desc>
     *
     * @return
     * @author Juguang.S
     * @createDate 2018/12/4
     */
    Integer getDeviceType(@Param("sn") String sn);

    /**
     * <desc>
     *      根据userId查询该用户的灵云clientUserId
     * </desc>
     *
     * @return
     * @author Juguang.S
     * @createDate 2018/12/4
     */
    String getLykzUserId(@Param("userId") String userId);

    /**
     * <desc>
     *      保存创建灵云设备账号信息
     * </desc>
     *
     * @param params 数据参数
     * @return
     * @author Juguang.S
     * @createDate 2017/12/19
     */
    Integer save(Map<String,Object> params);

    /**
     * <desc>
     *      根据项目编号和角色为开发者账号查询当前项目绑定的灵云快智的应用账号信息
     * </desc>
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2018/12/21
     */
    String getBingLykzAppId(@Param("projectId") String projectId, @Param("roleId") String roleId);

    /**
     * <desc>
     *      判断该emId是否已绑定过百度识别授权码
     * <desc/>
     *
     * @param baiduId 百度ID
     * @return
     * @author Juguang.S
     * @createDate 2019-02-26
     */
    Map<String,Object> getIsBingBaiduCode(@Param("baiduId") String baiduId);

    /**
     * <desc>
     *      查询未绑定的百度识别授权码
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2019-02-26
     */
    Map<String,Object> getBaiduCode(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      标准更新
     * </desc>
     * @param  params 更新信息
     * @return Integer
     * @author Juguang.S
     * @createDate 2019-02-26
     */
    Integer update(Map<String,Object> params);

    /**
     * <desc>
     *      更新绑定百度识别码的项目编号和设备唯一码
     * <desc/>
     *
     * @param projectId 项目编号
     * @param baiduId 百度ID
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019-02-26
     */
    Integer updateProjectId(@Param("projectId") String projectId,@Param("baiduId") String baiduId,@Param("deviceUnique") String deviceUnique,@Param("useStatus") String useStatus);

    /**
     * <desc>
     *      根据设备编号获取访客信息
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @param smartType 云对讲类型，31-门口机，32-围墙机
     * @return
     * @author Qiang.S
     * @createDate 2019/02/28
     */
    List<CloudIntercomVisitorVO> getVisitorInfoByUnique(@Param("deviceUnique") String deviceUnique, @Param("smartType") Integer smartType);

    /**
     * <desc>
     *      根据身份证序号获取用户编号
     * </desc>
     *
     * @param idcardKey 身份证序号
     * @param projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/02/28
     */
    String getUserIdByCdcardKey(@Param("idcardKey") String idcardKey, @Param("projectId") String projectId);

    /**
     * <desc>
     *      通过百度id来校验该百度Id是否未绑定过百度授权码
     * <desc/>
     *
     * @param baiduId 百度指纹码
     * @return
     * @author Juguang.S
     * @createDate 2019/03/12
     */
    Integer getBaiduIdBingStatus(@Param("baiduId") String baiduId);

    /**
     * <desc>
     *      根据deviceUnique查询该设备是否已绑定或已购买
     * <desc/>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/03/12
     */
    Integer getDeviceBuyOrBingStatus(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      释放该机号与之前所绑定百度id激活码之间的关系
     * <desc/>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/03/12
     */
    Integer updateOldDeviceBingInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取百度授权码是否充足
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2019/03/13
     */
    Map<String,Object> isEnoughByBaiduCode();

    /**
     * <desc>
     *      根据电话号查询用户编号
     * <desc/>
     *
     * @param phone 电话号
     * @return
     * @author Qiang.S
     * @createDate 2019/04/09
     */
    String getUserIdByPhone(String phone);

    /**
     * <desc>
     *      根据身份证序号获取访客编号
     * </desc>
     *
     * @param idcardKey 身份证序号
     * @param projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/05/15
     */
    String getVisitorByIdcardKey(@Param("idcardKey") String idcardKey, @Param("projectId") String projectId);

    /**
     * <desc>
     *      根据身份证序号获取云电梯用户id
     * </desc>
     *
     * @param idcardKey 身份证序号
     * @param projectId 项目编号
     * @param deviceUnique 云电梯设备序列号
     * @return 用户id
     * @author Qiang.S
     * @createDate 2019/05/15
     */
    String getElevatorUserIdByIdcardKey(@Param("idcardKey") String idcardKey, @Param("projectId") String projectId, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据身份证序号获取云门禁用户id
     * </desc>
     *
     * @param idcardKey 身份证序号
     * @param projectId 项目编号
     * @param deviceUnique 云电梯设备序列号
     * @return 用户id
     * @author wangzhi
     * @createDate 2019/05/15
     */
    String getEntranceUserIdByIdcardKey(@Param("idcardKey") String idcardKey, @Param("projectId") String projectId, @Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据项目ID查询物业增值信息
     * </desc>
     *
     * @param projectId 项目编号
     * @param flag 1云对讲,2云电梯,3云门禁
     * @return 用户id
     * @author Qiang.S
     * @createDate 2019/05/15
     */
    List<CloudIntercomDeviceVO.PropertyValue> getPropertyInfo(@Param("projectId") String projectId, @Param("flag") Integer flag);

    /**
     * <desc>
     *      通知云端升级失败原因
     * <desc/>
     *
     * @param sn
     * @param id 轮询命令id列表
     * @param status 状态，0-待处理，1-处理中，2-处理完，3-处理失败
     * @param msg 失败原因
     * @return
     * @author Qiang.S
     * @createDate 2019/08/12
     */
    Integer reportUpdateResult(@Param("sn") String sn,
                               @Param("id") String id,
                               @Param("status") Integer status,
                               @Param("msg") String msg);

    /**
     * <desc>
     *      根据项目ID查询物业云服务费的过期时间
     * </desc>
     *
     * @param projectId 项目编号
     * @return 用户id
     * @author Juguang.S
     * @createDate 2019/08/13
     */
    String getDeviceCloudServiceCostEndTime(@Param("projectId") String projectId);

    /**
     * <desc>
     *     根据sip帐号或获取设备唯一标识
     * </desc>
     * @param sipAccount sip帐号
     * @return
     * @author Qiang.S
     * @createDate 2018-09-12
     */
    CloudIntercomDeviceVO getDeviceUniqueBySip(@Param("sipAccount") String sipAccount);

    /**
     * <desc>
     *     根据设备编号查询ProductKey
     * </desc>
     * @param deviceUnique 设备编号
     * @return
     * @author Qiang.S
     * @createDate 2019-07-16
     */
    String getDeviceProductKey(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *     根据设备编号查询设备系统
     * </desc>
     * @param deviceUnique 设备编号
     * @return
     * @author Qiang.S
     * @createDate 2018-09-12
     */
    String getSystemTypeByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取云对讲地址信息
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/14
     */
    Map<String,Object> getAddressByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取云对讲用户黑名单信息
     * </desc>
     *
     * @param buildIds
     * @param unitIds
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/14
     */
    List<UserBlackInfoVO> getUserBlackInfos(@Param("buildIds") String[] buildIds,@Param("unitIds") String[] unitIds,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取云对讲临时用户黑名单
     * </desc>
     *
     * @param projectId
     * @param deviceId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/14
     */
    List<UserBlackInfoVO> getTempBlackInfos(@Param("projectId") String projectId,@Param("deviceId") Integer deviceId);

    /**
     * <desc>
     *      获取云对讲用户黑名单信息
     * </desc>
     *
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/14
     */
    List<UserBlackInfoVO> getUserBlackInfosByRoomId(@Param("roomId") String roomId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取云对讲临时用户黑名单
     * </desc>
     *
     * @param roomId
     * @param deviceId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/14
     */
    List<UserBlackInfoVO> getTempBlackInfosByRoomId(@Param("roomId") String roomId,@Param("projectId")String projectId,@Param("deviceId") Integer deviceId);

    /**
     * <desc>
     *      获取云对讲临时权限
     * </desc>
     *
     * @param deviceId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/12
     */
    List<Map<String,Object>> getTempAuths(@Param("deviceId") Integer deviceId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取云对讲临时权限
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/12
     */
    List<Map<String,Object>> getPushTempAuths(@Param("projectId") String projectId,@Param("userId") String userId);

    /**
     * <desc>
     *      获取云对讲临时权限
     * </desc>
     *
     * @param deviceId
     * @param projectId
     * @param currentPage
     * @param pageSize
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/12
     */
    Integer getTempAuthsCount(@Param("deviceId") Integer deviceId,@Param("projectId") String projectId,
                                          @Param("currentPage") Integer currentPage,@Param("pageSize") Integer pageSize);

    /**
     * <desc>
     *      查询门禁的地址
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/12
     */
     Map<String,Object> getDeviceAddress(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      查询访客是否有电梯的临时权限
     * <desc/>
     *
     * @param projectId 项目编号
     * @param password 动态密码
     * @param deviceId 设备4位id
     * @return
     * @author Juguang.S
     * @createDate 2019-09-27
     */
    AppVisitorPassCodeRecordPO getAppVisitorPassCodeByTemporaryAuth(@Param("projectId") String projectId,
                                                     @Param("password") String password,
                                                     @Param("deviceId")String deviceId);

    /**
     * <desc>
     *      根据SN查询设备单元信息
     * <desc/>
     *
     * @param sn
     * @return
     * @author Juguang.S
     * @createDate 2019-09-27
     */
    List<String> getCloudIntercomUnit(@Param("sn") String sn);

    /**
     * <desc>
     *      根据机号、项目编号查询设备单元信息
     * <desc/>
     *
     * @param deviceId 机号
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019-09-27
     */
    List<String> getElevatorUnit(@Param("deviceId") String deviceId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据sn获取该设备所对应批次号的云服务过期时间
     * </desc>
     *
     * @param sn
     * @return
     * @author Juguang.S
     * @createDate 2019/11/26
     */
    String getEndTimeBySn(@Param("sn") String sn);

    /**
     * <desc>
     *      根据设备唯一码查询屏幕云对讲屏幕尺寸
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @Author Zhu.yj
     * @createDate  2020/9/29
     */
    String getScreenTypeByDeviceUnique(@Param("deviceUnique") String deviceUnique);


    /**
     * <desc>
     *    获取产品类型代码
     * </desc>
     *
     * @param  deviceAttributes  产品型号值
     * @return  String           产品类型代码
     * @Author pengwei
     * @createDate  2020/11/18
     */
    String   getProductCode(@Param("deviceAttributes") String   deviceAttributes);


    /**
    *<desc>
    * 获取单元id
    *</desc>
    *
    * @Author  chengshican
    * @Date   2020-12-08 13:51
    * @Param
    * @Return
    * @Exception
    *
    */
    RoomInfoPO getUnitIdByRoomInfoId(@Param("roomId") String roomId);

    /**
    *<desc>
    * 通过设备的唯一标识查询设备所在地址
    *</desc>
    *
    * @Author  chengshican
    * @Date   2021-01-27 9:55
    * @Param  deviceUnique 设备唯一标识符
    * @Return   buildId 楼栋id   unitId  单元id
    * @Exception
    *
    */
    List<Map<String,String>> getUnitIdByEntranceDeviceUnique(@Param("deviceUnique") String deviceUnique);


    /**
     *<desc>
     * 通过设备的唯一标识查询设备所在地址
     *</desc>
     *
     * @Author  chengshican
     * @Date   2021-01-27 9:55
     * @Param  deviceUnique 设备唯一标识符
     * @Return   buildId 楼栋id   unitId  单元id
     * @Exception
     *
     */
    List<Map<String,String>> getUnitIdByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
    *<desc>
    * 根据地址获取电梯设备信息
    *</desc>
    *
    * @Author  chengshican
    * @Date   2021-01-27 9:55
    * @Param  buildId 楼栋id   unitId  单元id
    * @Return    deviceUnique 电梯设备的唯一标识符    liftDoorType 正背门信息  （正背门 1正门 0背门）
    * @Exception   
    * 
    */
    List<CloudElevatorVO> getElevatorLiftDoorTypeListByAddress(Map<String,String> address);

}
